#include<iostream>
#include"Socket.hpp"
#include"TcpServer.hpp"
#include"Protocol.hpp"
#include"Calculate.hpp"
#include<memory>
#include"../5.Daemon/Daemon.hpp"

//HandlerRequest字节流数据解析和调用业务处理的方法

std::string HandlerRequest(std::string& inbufferstream,bool* error_code)
{
    std::cout<<inbufferstream<<std::endl;
    *error_code = true;
    // 1.计算机对象
    CalculateNs::Calculate cal;
    // 2.构建响应对象
    std::unique_ptr<Proctocol::Factory> factory=std::make_unique<Proctocol::Factory>();
    auto req=factory->BuildRequest();
    std::string message;
    // 3.分析字节流，是否有一个完整的报文
    std::string total_resp_string;
    while (Proctocol::Decode(inbufferstream, &message))
    {
        std::cout<<"message-------------"<<std::endl;
        // 4.反序列化request
        if (!req->Deserialize(message))
        {
            *error_code = false;
            return std::string();
        }
        // 5.业务处理（网络计算器）
        auto resp = cal.Cal(req);
        // 6.序列化response
        std::string send_string;
        resp->Serialize(&send_string);
        // 7.构建完成的字符串级别的响应报文
        send_string = Proctocol::Encode(send_string);
        total_resp_string+=send_string;
    }
    return total_resp_string;
}


int main(int argc,char* argv[])
{
    if(argc!=2)
    {
        std::cout<<"Usage : "<<argv[0]<<" localport "<<std::endl;
        return 0;
    }
    uint16_t localport=std::stoi(argv[1]);
    Deamon(false,false);
    std::unique_ptr<TcpServer> tsvr(new TcpServer(localport,HandlerRequest));
    tsvr->Loop();
    return 0;
}